上一讲,我带你学习了“如何评估系统的性能指标”以及“如何分析系统的性能瓶颈”,今天我们继续上一讲的话题,来解答“如何设计高性能的架构”。
我会从两方面出发,带你看一看在面试中遇到高性能架构设计问题时,初中级研发工程师和高级研发工程师不同的回答思路。
学完上一讲后,你应该知道自己要从系统全链路的视角,从前端请求到后端服务评估各环节的性能指标,那么对于系统性能的优化,你依然要从全链路的视角上进行高性能的设计。
前端的优化主要有三个环节:减少请求次数、页面静态化、边缘计算。
减少请求次数:减少前端脚本与后端服务的请求次数,有三种方案。
而页面静态化就是缓存的一种方式,相当于把整个页面元素缓存起来,那么缓存在哪里呢?
通常是将页面文件事先存储在 CDN 节点中,比如将商品详情页做静态化,就是将商品详情页的页面元素存储在 CDN 节点,然后所有请求就可以直接以由 CDN 来提供服务,就不会到达后端服务了,就减少了对后端服务的压力。
边缘计算,被很多人提及,原因是大数据处理的实时性越来越高,由集中式的服务系统提供实时性的计算能力捉襟见肘,所以很多大厂开始将计算能力放到距离用户最近的 CDN 节点中,这就要求原有的 CDN 节点不只作为静态资源文件的缓存,而是要提供可以定制化的计算能力。
这部分内容会涉及一些新的概念,比如无服务架构 Serverless、BaaS、FaaS,在面试中不要求候选人必须掌握,但它会是你的加分项。
后端环节的性能问题,可以从基础设施层面、网络层面、架构层面三个角度进行考量,为了帮助你记忆,我总结了一张脑图给你参考。
比如,网络层面可以考虑网络专线、CDN 优化;架构层面可以考虑动静分离、集群优化、数据隔离、服务拆分、异步驱动、负载均衡等方案。
以上就是高性能架构设计中的技术点,初中级研发工程师要能知道系统的性能瓶颈在哪儿,以及如何优化,但高级研发工程师,不能只停留掌握技术点上,而是要有自己对技术的理解(例如下面的例子)。接下来,我就通过讲解自己对高性能的认知,帮你了解并培养自己对于技术的思考。
你在设计高性能系统架构时,首先是清楚认知系统的硬性性能指标,举个例子。
所以,对一个架构师来说,要设计一个高性能的架构,至少要有以下四个系统设计的思考步骤。
在明确了性能指标之后,高性能架构的落地工作,可以分为以下三个关键技术点。
有的同学可能会疑惑,既然有多余的资源为什么不提前扩容呢?这是出于对 IT 成本的考虑,作为系统设计者也要把成本作为系统的设计原则之一。
另一个关键因素是系统的扩容速度。这是在当今互联网软件中非常重要的系统能力之一了,就算架构设计的不够优雅,但如果响应够快,也是能解决问题。
对于性能设计(不仅仅是性能设计,所有非功能性的设计)要在项目的各阶段都进行考虑,以便根据项目过程的推进随时进行调整和优化。
技术行业发展到今天,很多技术上的问题都不存在挑战了,所谓的高性能架构设计,也仅仅变成了一种标准化的应对流程。
你要做的就是将业务问题,抽象成一个技术问题,比如具体到数据库设计、缓存设计、队列设计、线程设计等技术细节,然后不管你通过什么渠道,Google 也好,问同事也好,或者购买付费知识也好,都能找到技术的应对方案。
而对于面试,你的答题思路应该是这样的: